1
תגובות
את השאלה הזאת מצאתי בפייסבוק. מתוך 11 תגובות יש רק אחת נכונה.
וביקשו בסה"כ לבדוק שהוזן ערך כלשהו בתיבת טקטס:

>>>
איך כותבים שורה ריקה ?
כלומר ( if ( $name == המשתמש לא כתב כלום
איך אני כותב את זה ?
>>>>

1 תשובות

avatar ענה intval ב 08 לספטמבר 2012 #

תשובה א

if($name == ''){


אופציה מעולה. מה שצריך.
כמובן שכדאי לעשות השוואת משתנים עם === ולא ==, אבל חוץ מזה הכל בסדר.
אולי חוץ מעוד דבר אחד.. מאיפה הגיעה המשתנה name ?

ברור שמי ששאל את השאלה נתן אותו בתור דוגמה וכתב שהמשתנה מגיעה מהקלט.
זה אומר לנו ששורה מעל השואל כתב משהו כזה.
$name = $_GET['name'];
אם המשתמש לא רק שלא מילא את השדה הזה, אלה בכלל השדה הזה לא נשלח שום בדיקה לא תציל אותו.


תשובה ב'
if(isset($name) && $name == NULL)

תשובה מגניבה :) לייק? כמעט.
שוב פעם שורה מעל כתוב $name = $_GET['name'];
ככה שהמשתנה תמיד set.
המשך התשובה בסדר גמור. אם לא קיים ערך קלט כזה, המשתנה name יקבל ערך null ויטפס בחלק השני של התנאי.
רק שמחרוזת ריקה לא שווה ל null במקרה שהשדה קיים בקלט והמשתמש פשוט לא הזין שם שום דבר.
כיוצא מזה - התשובה שהוצאה לא רק שלא בודקת שום דבר, אלה רק משגעת את המעבד.


תושבה ג'
if(empty($name))

מעולה. האזכור הראשון לפונקציה מדהימה בשם empty שבודקת האם המשתנה ריק.
אם לא נקבל שגיאה בשורה של ההצבה בגלל שלא בדקנו בכלל אם המשתנה isset - באמת שהתנאי הזה יבדוק שהמחרוזת לא ריקה. כל עוד אין בה רווחים. בגלל שמחרוזת שמורכבת מ4 פעמים תו של רווח זה לא מחרוזת ריקה.
כנראה שהשואל לא ישמח יותר מדי לראות משתמש "בלי שם" בגלל שהדפדפן מקבץ רווחים לפני ההצגה.


תשובה ד'
if (!$name) { }

בדיוק כמו empty, בגלל שמאחורי הקלעים empty עושה בדיוק אותו דבר.



מה יצא?
יש לנו בסה"כ שלושה דברים שצריך לבדוק
- המשתנה הגיע בקלט isset
- המשתנה לא מהווה מחרוזת ריקה !empty
- המשתנה לא מורכב מרווחים בלבד

ובשביל לבדוק את שלושת הדברים הללו בשורה אחת - היא צריכה להיות כזאת:
if(!isset($_GET['name']) || trim($_GET['name']) === '')
{
  echo 'you have no name';
}
else
{
  $name = trim($_GET['name');
  echo "hi $name";
}